//
//  AiSpeechEngine.h
//  AiEngine2
//
//  Created by Midfar Sun on 12/27/12.
//  Copyright (c) 2012 Midfar Sun. All rights reserved.
//


#import <Foundation/Foundation.h>
#import "AiSpeechEngineDelegate.h"
#import "AiEngineConfig.h"
#import "BaseRequestParams.h"

/**
 * 语音引擎停止的类型：
 * STOPTYPE_AUTO 到指定时长后自动结束，或VAD检测语音已经结束
 * STOPTYPE_MANUAL 运行过程中用户调用了stop方法来停止引擎
 * STOPTYPE_RESET 运行过程中用户调用了reset方法来停止引擎
 */
enum AISPEECHENGINE_STOPTYPE {
    AISPEECHENGINE_STOPTYPE_AUTO = 0,
    AISPEECHENGINE_STOPTYPE_MANUAL = 1,
    AISPEECHENGINE_STOPTYPE_RESET = 2,
};

/**
 * VAD状态：
 * IDLE 没有检测到语音
 * START 检测到了语音
 * END 检测到语音结束
 */
enum AISPEECHENGINE_VAD {
	AISPEECHENGINE_VAD_INVALID  = -1,
	AISPEECHENGINE_VAD_IDLE  = 0,
	AISPEECHENGINE_VAD_START = 1,
	AISPEECHENGINE_VAD_END   = 2,
};


/**
 * 思必驰语音引擎服务，支持"语音识别","语音唤醒"服务<br>
 * 提供接口:
 * <ul>
 * <li>创建引擎 {@link #-(id)initWithConfig:(AiEngineConfig *)engineCfg}</li>
 * <li>启动引擎 {@link #-(NSString *)start:(BaseRequestParams *)engineParams}</li>
 * <li>停止引擎 {@link #-(OSStatus)stop}</li>
 * <li>重置引擎 {@link #-(void)reset}</li>
 * </ul>
 * <p/>
 * 云端语音识别:
 *
 * <pre>
 *    AiEngineConfig *engineCfg = [[AiEngineConfig alloc] init];                 // 创建引擎配置对象
 *    [engineCfg setAppKey:kAppKey];                                              // 设置应用账号
 *    [engineCfg setAppSecretKey:kSecretKey];                                     // 设置应用密码
 *    AiSpeechEngine engine = [[AiSpeechEngine alloc] initWithConfig:engineCfg]; // 创建引擎，并设置回调与全局配置
 *    engine.delegate = self ;
 *    ASRParams *params = [[ASRParams alloc] init];
 *    [params setReqRes:xxx];                                                    //设置请求资源
 *
 *    [engine start:param];                                                        //启动引擎
 *
 *    ...
 *
 *    [engine stop];                                                                //停止引擎
 *    ...
 *
 *    [engine cancel];                                                               //取消本次引擎请求
 * </pre>
 *
 * 语音唤醒:
 *
 * <pre>
 *    AiEngineConfig *engineCfg = [[AiEngineConfig alloc] init];                   //创建引擎配置对象
 *    LocalWakeupConfig *localCfg = [[LocalWakeupConfig alloc] init];              //创建本地配置对象
 *    [localCfg setResDir: xxx];                                                   // 设置主目录
 *    [localCfg setNetBinFile: xxx];                                               // 设置网络资源文件名
 *    [localCfg setResBinFile: xxx];                                               // 设置声学资源文件名
 *    [engineCfg setNativeConfig:localCfg];                                         // 向配置对象中加入唤醒服务配置
 *    AiSpeechEngine engine = [[AiSpeechEngine alloc] initWithConfig:engineCfg];   // 创建识别引擎
 *
 *    WakeupParams *param = [[WakeupParams alloc] init];
 *    [engine start:param];                                                        //启动引擎
 *     
 *    ...
 *    
 *    [engine stop];                                                                //停止引擎
 *
 * </pre>
 
 */

@interface AiSpeechEngine : NSObject

/**
 *	@brief	事件委托
 */
@property(nonatomic, assign) id<AiSpeechEngineDelegate> delegate;

/**
 *	@brief	标签，用户自定义
 */
@property(nonatomic, assign) int tag;

/**
 *	@brief	初始化语音引擎
 *
 *	@param 	engineCfg 	引擎配置参数
 *
 *	@return	返回语音引擎对象
 */
- (id)initWithConfig:(AiEngineConfig *)engineCfg;

/**
 *	@brief	开始语音引擎
 *
 *	@param 	engineParams 	开始请求参数
 *
 *	@return	录音ID
 */
- (NSString *)start:(BaseRequestParams *)engineParams;

/**
 *	@brief	停止语音引擎
 *
 *	@return	返回函数执行状态码（0为成功）
 */
- (OSStatus)stop;

/**
 *	@brief	重置语音引擎
 */
- (void)reset;

/**
 *	@brief	取消语音引擎
 */
- (void)cancel;


@end

